home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / v cisle / robocopy / rktools.exe / RCDATA / CABINET / rktools.msi / persist.vbs < prev    next >
Text File  |  2003-04-18  |  10KB  |  409 lines

  1. '----------------------------------------------------------------------
  2. '
  3. ' Copyright (c) Microsoft Corporation 1998-2003
  4. ' All Rights Reserved
  5. '
  6. ' Abstract:
  7. '
  8. ' persist.vbs - script for saving and restoring printer configuration
  9. '
  10. ' Usage:
  11. ' persist [-rs?] [-b printer-name][-f file-name]
  12. '
  13. ' Examples:
  14. ' persist.vbs -s -b \\server\printer -f file.txt -all
  15. ' persist.vbs -r -b printer -f file.txt -sec
  16. '
  17. '----------------------------------------------------------------------
  18.  
  19. option explicit
  20.  
  21. '
  22. ' Debugging trace flags, to enable debug output trace message
  23. ' change gDebugFlag to true.
  24. '
  25. const kDebugTrace = 1
  26. const kDebugError = 2
  27. dim   gDebugFlag
  28.  
  29. gDebugFlag = false
  30.  
  31. '
  32. ' Messages to be displayed if the scripting host is not cscript
  33. '
  34. const kMessage1 = "Please run this script using CScript."
  35. const kMessage2 = "This can be achieved by"
  36. const kMessage3 = "1. Using ""CScript script.vbs arguments"" or"
  37. const kMessage4 = "2. Changing the default Windows Scripting Host to CScript"
  38. const kMessage5 = "   using ""CScript //H:CScript //S"" and running the script "
  39. const kMessage6 = "   ""script.vbs arguments""."
  40.  
  41. '
  42. ' Operation action values.
  43. '
  44. const kActionUnknown    = 0
  45. const kActionSave       = 1
  46. const kActionRestore    = 2
  47.  
  48. const kErrorSuccess     = 0
  49. const KErrorFailure     = 1
  50.  
  51. const kPrinterData      = 1
  52. const kPrinterInfo2     = 2
  53. const kPrinterInfo7     = 4
  54. const kPrinterSec       = 8
  55. const kUserDevmode      = 16
  56. const kPrinterDevmode   = 32
  57. const kColorProf        = 64
  58. const kForceName        = 128
  59. const kResolveName      = 256
  60. const kResolvePort      = 512
  61. const kResolveShare     = 1024
  62. const kDontGenerateShare= 2048
  63.  
  64. '
  65. ' kPrinterData + kPrinterInfo2 + kPrinterDevmode
  66. '
  67. const kMinimumSettings  = 35
  68.  
  69. '
  70. ' kMinimumSettings + kPrinterInfo7 + kPrinterSec +
  71. ' kUserDevmode + kColorProf
  72. '
  73. const kAllSettings      = 127
  74.  
  75. main
  76.  
  77. '
  78. ' Main execution starts here
  79. '
  80. sub main
  81.  
  82.     dim iAction
  83.     dim iRetval
  84.     dim strPrinter
  85.     dim strFile
  86.     dim iFlags
  87.  
  88.     '
  89.     ' Abort if the host is not cscript
  90.     '
  91.     if not IsHostCscript() then
  92.  
  93.         call wscript.echo(kMessage1 & vbCRLF & kMessage2 & vbCRLF & _
  94.                           kMessage3 & vbCRLF & kMessage4 & vbCRLF & _
  95.                           kMessage5 & vbCRLF & kMessage6 & vbCRLF)
  96.  
  97.         wscript.quit
  98.  
  99.     end if
  100.  
  101.     iRetval = ParseCommandLine(iAction, strPrinter, strFile, iFlags)
  102.  
  103.     if iRetval = kErrorSuccess then
  104.  
  105.         select case iAction
  106.  
  107.             case kActionSave
  108.                  iRetval = SavePrinter(strPrinter, strFile, iFlags)
  109.  
  110.             case kActionRestore
  111.                  iRetval = RestorePrinter(strPrinter, strFile, iFlags)
  112.  
  113.             case else
  114.                  Usage(True)
  115.                  exit sub
  116.  
  117.         end select
  118.  
  119.     end if
  120.  
  121. end sub
  122.  
  123. '
  124. ' Save printer configuration
  125. '
  126. function SavePrinter(strPrinter, strFile, iFlags)
  127.  
  128.     on error resume next
  129.  
  130.     DebugPrint kDebugTrace, "In SavePrinter"
  131.  
  132.     dim oMaster
  133.  
  134.     set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  135.  
  136.     oMaster.PrinterPersistSave strPrinter, strFile, iFlags
  137.  
  138.     if Err.Number = kErrorSuccess then
  139.  
  140.         wscript.echo "Success saving the configuration of the printer """ & strPrinter & """ "
  141.  
  142.         SavePrinter = kErrorSuccess
  143.  
  144.     else
  145.  
  146.         wscript.echo "Unable to save the configuration of the printer """ & strPrinter _
  147.                      & """, error 0x" & Hex(Err.Number) & ". " & Err.Description
  148.  
  149.         SavePrinter = kErrorFailure
  150.  
  151.     end if
  152.  
  153. end function
  154.  
  155. '
  156. ' Restore printer configuration
  157. '
  158. function RestorePrinter(strPrinter, strFile, iFlags)
  159.  
  160.     on error resume next
  161.  
  162.     DebugPrint kDebugTrace, "In RestorePrinter"
  163.  
  164.     dim oMaster
  165.  
  166.     Set oMaster = CreateObject("PrintMaster.PrintMaster.1")
  167.  
  168.     oMaster.PrinterPersistRestore strPrinter, strFile, iFlags
  169.  
  170.     if Err.Number = kErrorSuccess then
  171.  
  172.         wscript.echo "Success restoring the configuration of the printer """ & strPrinter & """ "
  173.  
  174.         RestorePrinter = kErrorSuccess
  175.  
  176.     else
  177.  
  178.         wscript.echo "Unable to restore the configuration of the printer """ & strPrinter _
  179.                      & """, error: 0x" & Hex(Err.Number) & ". " & Err.Description
  180.  
  181.         RestorePrinter = kErrorFailure
  182.  
  183.     end if
  184.  
  185. end function
  186.  
  187. '
  188. ' Debug display helper function
  189. '
  190. sub DebugPrint(uFlags, strString)
  191.  
  192.     if gDebugFlag = true then
  193.  
  194.         if uFlags = kDebugTrace then
  195.  
  196.             wscript.echo "Debug: " & strString
  197.  
  198.         end if
  199.  
  200.         if uFlags = kDebugError then
  201.  
  202.             if Err <> 0 then
  203.  
  204.                 wscript.echo "Debug: " & strString & " Failed with " & Hex(Err)
  205.  
  206.             end if
  207.  
  208.         end if
  209.  
  210.     end if
  211.  
  212. end sub
  213.  
  214. '
  215. ' Parse the command line into it's components
  216. '
  217. function ParseCommandLine(iAction, strPrinter, strFile, iFlags)
  218.  
  219.     DebugPrint kDebugTrace, "In the ParseCommandLine"
  220.  
  221.     dim oArgs
  222.     dim iIndex
  223.  
  224.     iFlags = 0
  225.  
  226.     iAction = kActionUnknown
  227.     iIndex  = 0
  228.  
  229.     set oArgs = wscript.Arguments
  230.  
  231.     while iIndex < oArgs.Count
  232.  
  233.         select case oArgs(iIndex)
  234.  
  235.             case "-r"
  236.                 iAction = kActionRestore
  237.  
  238.             case "-s"
  239.                 iAction = kActionSave
  240.  
  241.             case "-b"
  242.                 iIndex = iIndex + 1
  243.                 strPrinter = oArgs(iIndex)
  244.  
  245.             case "-f"
  246.                 iIndex = iIndex + 1
  247.                 strFile = oArgs(iIndex)
  248.  
  249.             case "-data"
  250.                 iFlags = iFlags + kPrinterData
  251.  
  252.             case "-2"
  253.                 iFlags = iFlags + kPrinterInfo2
  254.  
  255.             case "-7"
  256.                 iFlags = iFlags + kPrinterInfo7
  257.  
  258.             case "-sec"
  259.                 iFlags = iFlags + kPrinterSec
  260.  
  261.             case "-udev"
  262.                 iFlags = iFlags + kUserDevmode
  263.  
  264.             case "-pdev"
  265.                 iFlags = iFlags + kPrinterDevmode
  266.  
  267.             case "-color"
  268.                 iFlags = iFlags + kColorProf
  269.  
  270.             case "-force"
  271.                 iFlags = iFlags + kForceName
  272.  
  273.             case "-resname"
  274.                 iFlags = iFlags + kResolveName
  275.  
  276.             case "-resport"
  277.                 iFlags = iFlags + kResolvePort
  278.  
  279.             case "-resshare"
  280.                 iFlags = iFlags + kResolveShare
  281.  
  282.             case "-noshare"
  283.                 iFlags = iFlags + kDontGenerateShare
  284.  
  285.             case "-min"
  286.                 iFlags = iFlags + kMinimumSettings
  287.  
  288.             case "-all"
  289.                 iFlags = iFlags + kAllSettings
  290.  
  291.             case "-?"
  292.                 Usage(true)
  293.                 exit function
  294.  
  295.             case else
  296.                 Usage(true)
  297.                 exit function
  298.  
  299.         end select
  300.  
  301.         iIndex = iIndex + 1
  302.  
  303.     wend
  304.  
  305.     if Err.Number = kErrorSuccess then
  306.  
  307.         ParseCommandLine = kErrorSuccess
  308.  
  309.     else
  310.  
  311.         wscript.echo "Unable to parse command line, error 0x" & _
  312.                      Hex(Err.Number) & ". " & Err.Description
  313.  
  314.         ParseCommandLine = KErrorFailure
  315.  
  316.     end if
  317.  
  318. end function
  319.  
  320. '
  321. ' Display command usage.
  322. '
  323. sub Usage(bExit)
  324.  
  325.     wscript.echo "Usage: persist [-rs?] [-b printer-name][-f file-name][-data]"
  326.     wscript.echo "               [-2][-7][-sec][-udev][-pdev][-color][-force]"
  327.     wscript.echo "               [-resname][-resport][-resshare][-noshare][-min][-all]"
  328.     wscript.echo ""
  329.     wscript.echo "Arguments:"
  330.     wscript.echo "-r        - restore printer configuration"
  331.     wscript.echo "-s        - save printer configuration"
  332.     wscript.echo "-?        - display command usage"
  333.     wscript.echo "-b        - printer name"
  334.     wscript.echo "-data     - printer data"
  335.     wscript.echo "-2        - Printer Info 2"
  336.     wscript.echo "-7        - Printer Info 7"
  337.     wscript.echo "-sec      - security"
  338.     wscript.echo "-color    - color profile"
  339.     wscript.echo "-force    - force name"
  340.     wscript.echo "-udev     - user devmode"
  341.     wscript.echo "-pdev     - printer devmode"
  342.     wscript.echo "-resname  - resolve name"
  343.     wscript.echo "-resport  - resolve port"
  344.     wscript.echo "-resshare - resolve share"
  345.     wscript.echo "-noshare  - don't share the printer"
  346.     wscript.echo "-min      - minimum settings"
  347.     wscript.echo "-all      - all settings"
  348.     wscript.echo ""
  349.     wscript.echo "Examples:"
  350.     wscript.echo "persist.vbs -s -b \\server\printer -f file.txt -all"
  351.     wscript.echo "persist.vbs -r -b printer -f file.txt -sec"
  352.  
  353.     if bExit then
  354.  
  355.         wscript.quit(1)
  356.  
  357.     end if
  358.  
  359. end sub
  360.  
  361. '
  362. ' Determines which program is used to run this script.
  363. ' Returns true if the script host is cscript.exe
  364. '
  365. function IsHostCscript()
  366.  
  367.     on error resume next
  368.  
  369.     dim strFullName
  370.     dim strCommand
  371.     dim i, j
  372.     dim bReturn
  373.  
  374.     bReturn = false
  375.  
  376.     strFullName = WScript.FullName
  377.  
  378.     i = InStr(1, strFullName, ".exe", 1)
  379.  
  380.     if i <> 0 then
  381.  
  382.         j = InStrRev(strFullName, "\", i, 1)
  383.  
  384.         if j <> 0 then
  385.  
  386.             strCommand = Mid(strFullName, j+1, i-j-1)
  387.  
  388.             if LCase(strCommand) = "cscript" then
  389.  
  390.                 bReturn = true
  391.  
  392.             end if
  393.  
  394.         end if
  395.  
  396.     end if
  397.  
  398.     if Err <> 0 then
  399.  
  400.         call wscript.echo("Error 0x" & hex(Err.Number) & " occurred. " & Err.Description _
  401.                           & ". " & vbCRLF & "The scripting host could not be determined.")
  402.  
  403.     end if
  404.  
  405.     IsHostCscript = bReturn
  406.  
  407. end function
  408.  
  409.